<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>数据转换软件</title>
    <script src="js/docxtemplater.min.js"></script>
    <script src="js/xlsx.full.min.js"></script>
    <script src="js/pizzip.min.js"></script>
<!-- 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/pizzip@3.1.7/dist/pizzip.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/docxtemplater@3.53.0/build/docxtemplater.min.js"></script> -->
    <style>
        #dataTable {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            overflow-y: auto;
            height: 600px;
            display: block;
            background: #deffe1;
            font-size: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        #fileInput {
            height: auto;
            font-size: 20px;

        }
        #convertButton {
            width: 100px;
            height: auto;
            font-size: 20px;
        }
        #exportButton {
            width: 100px;
            height: auto;
            font-size: 20px;
        }
        span {
            font-size: 20px;
        }
    </style>
</head>
<body>
    <h1>追溯码DOCX转换XLSX</h1>
    <input type="file" id="fileInput" accept=".doc,.docx" />
    <button id="convertButton">转换</button>
    <button id="exportButton">导出</button>
    
    <table id="dataTable">
        <thead>
            <tr>
                <th>IMEI</th>
                <th>CCID</th>
            </tr>
        </thead>
        <div>
            <span>解析后的数据总数：</span>
            <span id="dataCount">--</span>
        </div>
        <tbody id="dataBody">
            <!-- 解析后的数据将显示在这里 -->
        </tbody>
    </table>

    <script>
        let result = [];

        document.getElementById('convertButton').onclick = function () {
            const fileInput = document.getElementById('fileInput');
            const file = fileInput.files[0];

            if (!file) {
                alert('请上传一个DOCX文件');
                return;
            }

            // 检查文件扩展名
            if (!file.name.endsWith('.docx')) {
                alert('请确保文件格式为DOCX');
                return;
            }

            const reader = new FileReader();
            reader.onload = function (event) {
                try {
                    const zip = new PizZip(event.target.result);
                    const doc = new docxtemplater().loadZip(zip);

                    // 提取文本内容
                    const content = doc.getFullText();
                    parseContent(content);
                } catch (error) {
                    console.error("文件解析错误：", error);
                    alert('无法解析文件，请确保文件格式正确并为DOCX格式');
                }
            };
            reader.readAsArrayBuffer(file); // 以 ArrayBuffer 形式读取文件
        };

        function parseContent(content) {
            // 1. 按换行切分并合并为一个长字符串
            const lines = content.split('\n');
            const joinedByLine = lines.join('');

            // 2. 按 | 切分并合并为一个长字符串
            const segments = joinedByLine.split('|');
            const joinedByPipe = segments.join('');
            
            // 3. 每个部分再按 ; 切分
            const items = [];
            segments.forEach(segment => {
                items.push(...segment.split(';'));
            });
            result = [];

            // console.log(items);

            let imei = null; // 存储当前找到的 IMEI
            let ccid = null; // 存储当前找到的 CCID

            items.forEach(item => {
                item = item.trim(); // 去掉前后空白字符

                // 如果 IMEI 已经存在，先匹配 CCID
                if (imei) {
                    const ccidMatch = item.match(/CCID:(\d+)/);
                    if (ccidMatch) {
                        ccid = ccidMatch[1]; // 找到 CCID
                        result.push({ IMEI: imei, CCID: ccid });
                        imei = null; // 重置 IMEI
                        ccid = null; // 重置 CCID
                    }

                    const imeiMatch = item.match(/IMEI:(\d+)/);
                    if (imeiMatch) {
                        imei = imeiMatch[1]; // 找到 IMEI
                    }
                } else {
                    // 正常情况下没有 IMEI 或 CCID
                    const imeiMatch = item.match(/IMEI:(\d+)/);
                    const ccidMatch = item.match(/CCID:(\d+)/);
                    if (imeiMatch) {
                        imei = imeiMatch[1]; // 找到 IMEI
                    }
                    if (ccidMatch) {
                        ccid = ccidMatch[1]; // 找到 CCID
                        if (imei) {
                            result.push({ IMEI: imei, CCID: ccid });
                            imei = null; // 重置 IMEI
                            ccid = null; // 重置 CCID
                        }
                    }
                }
            });

            displayResults(result);
        }

        function displayResults(result) {
            document.getElementById('dataCount').innerText = result.length;

            const dataBody = document.getElementById('dataBody');
            dataBody.innerHTML = '';
            result.forEach(entry => {
                const row = document.createElement('tr');
                const imeiCell = document.createElement('td');
                imeiCell.textContent = entry.IMEI;
                const ccidCell = document.createElement('td');
                ccidCell.textContent = entry.CCID;
                row.appendChild(imeiCell);
                row.appendChild(ccidCell);
                dataBody.appendChild(row);
            });
            // alert('数据已成功解析并显示在表格中。');
        }

        document.getElementById('exportButton').onclick = function() {
            // 导出到 XLSX
            const worksheet = XLSX.utils.json_to_sheet(result);
            const workbook = XLSX.utils.book_new();
            XLSX.utils.book_append_sheet(workbook, worksheet, '数据');
            XLSX.writeFile(workbook, '追溯码.xlsx');
        }
    </script>
</body>
</html>
